import greenfoot.*;  // (World, Actor, GreenfootImage, Greenfoot and MouseInfo)

/**
 * Esta clase es la clase del usuario, todos los movimientos por parte del usuario son validados aqui.
 * 
 * @author Ulises Yamil Castorena Caldera
 * @version 1.0
 */
public class Personaje extends Actor
{    
    private GreenfootImage img;//Variable que se va a utilizar para crear un objeto imagen.
    private GreenfootImage img1;//Variable que se va a utilizar para crear un objeto imagen.
    private GreenfootSound sd;//Variable que se va a utilizar para crear un objeto sonido.
    private GreenfootSound sd1;//Variable que se va a utilizar para crear un objeto sonido.
    private GreenfootSound sd2;//Variable que se va a utilizar para crear un objeto sonido.
    private boolean ubic;//Variable que indica la ubicación del usuario(arriba o abajo).
    private boolean band;//Variable que indica si el vehiculo esta en proceso de cambiar su ubicación.       
    
    /**
     * Constructor para la clase Personaje, inicializa el valor de ubic el cual es la ubicación del vehiculo ademas de crear los objetos imagen y sonido,
     * finalmente muestra la imagen del carro.
     */
    public Personaje()
    {
        ubic = false;
        band = false;              
        img = new GreenfootImage("carro.png");
        img1 = new GreenfootImage("pv1.png");
        sd = new GreenfootSound("Lacuca.mp3");
        sd1 = new GreenfootSound("Haz.mp3");
        sd2 = new GreenfootSound("Teletrans.mp3");
        img.mirrorHorizontally();
        img.scale(90,60);
        setImage(img);        
    }
    
    /**
     * Método Act de la clase Personaje, en el se muestra la imagen del vehiculo ademas se encuentran los métodos para sus validaciones.
     */
    public void act() 
    {
        setImage(img);
        movimiento();
        if(band)        
            cambia();
    }        
    
    /**
     * Método donde es modificada la ubicación del personaje, dependiendo de la tecla que se presione.
     */
    public void movimiento()
    {
        if(Greenfoot.isKeyDown("up") && !ubic)        
        {
            sd2.stop();
            sd2.play();
            band = true;                    
        }
        else if(Greenfoot.isKeyDown("down") && ubic)                    
        {
            sd2.stop();
            sd2.play();
            band = true;        
        }
        else if(Greenfoot.isKeyDown("right"))        
           move(4);                   
        else if(Greenfoot.isKeyDown("left"))   
           move(-4);
        else if(Greenfoot.isKeyDown("w"))
           sd.play();
        else if(Greenfoot.isKeyDown("q"))
           sd1.play();
    }        
    
    /**
     * Método que cambia la ubcación del usuario.
     */
    public void cambia()
    {
        if(!ubic)
        {
           if(getY() >= 200)                           
               setLocation(getX(),getY() - 10);           
           if(getY() == 192)
              img.mirrorVertically();
           if(getY() <= 192 && getY() > 68)
            setLocation(getX(),getY() - 10);
           if(getY() == 62)
           {
              band = false;
              ubic = true;
           }
        }                  
        else if(ubic)
        {
           if(getY() <= 200)                           
               setLocation(getX(),getY() + 10);           
           if(getY() == 192)
              img.mirrorVertically();
           if(getY() >= 192 && getY() < 333)
             setLocation(getX(),getY() + 10);
           if(getY() == 332)
           {
              band = false;
              ubic = false;
           }
        }
    }
}
